package pe.gob.osinergmin.interfase_siaf.dac.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.dao.CertificadoFaseDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CertificadoFase;

@Repository("certificadoFaseDao")
public class CertificadoFaseDaoImpl implements CertificadoFaseDao {
	
	
	private NamedParameterJdbcTemplate jdbcParameterTemplateData;	
	 
	 @Autowired
	public void SetDataSource(DataSource dataSourceData){		
		 this.jdbcParameterTemplateData = new NamedParameterJdbcTemplate(dataSourceData);
	 }
	 
	 
	 
	 /**DECLARACION DE SQL**/
	private static final String SQL_COUNT_TIPO_ID_RUC =
			" SELECT COUNT(certificad) FROM CERTIFICADO_FASE  WHERE certificad =:certificad AND secuencia=:secuencia "
			+ "AND ano_eje=:anoEje AND sec_ejec=:secEjec "
			+ "AND es_comprom='S' AND tipo_id=:tipoId AND ruc=:ruc ";	
	
	
	
	private static final String SQL_SELECT_CERTIFICADO_MONTO_MN =
			" SELECT saldo_naci FROM certificado_fase WHERE certificad=:certificad AND "
			+ " secuencia=:secuencia AND ano_eje =:anoEje AND sec_ejec=:secEjec";
	
	private static final String SQL_COUNT_CERTIFICADO =
			" SELECT COUNT(certificad) FROM certificado_fase WHERE certificad=:certificad AND "
			+ " secuencia=:secuencia AND ano_eje =:anoEje AND sec_ejec=:secEjec";	
	
	/**IMPLEMENTACION DE METODOS**/	
	 @Override
	 public int verificarExiteProveedor(CertificadoFase fase) throws Exception{
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(fase);
		 return this.jdbcParameterTemplateData.queryForInt(SQL_COUNT_TIPO_ID_RUC, parameters);
	 }
	 
	 
	 @Override
	 public List<CertificadoFase> bucarMontoMnTotalCert(CertificadoFase cert) throws Exception {		 
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
		 RowMapper<CertificadoFase> lista = ParameterizedBeanPropertyRowMapper.newInstance(CertificadoFase.class);		
		 return this.jdbcParameterTemplateData.query(SQL_SELECT_CERTIFICADO_MONTO_MN, parameters, lista);	
	 }
	 
	 
	 @Override
	 public int verificarExiteCertificado(CertificadoFase cert) throws Exception{
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
		 return this.jdbcParameterTemplateData.queryForInt(SQL_COUNT_CERTIFICADO, parameters);
	 }
	

}
